Pornind de la bug-urile găsite în walkthrough-ul tău (mașina apare la Atelier dar nu la Constatare, nu are mecanic și nu poate fi alocat, coada de recepție neclară, formular de recepție incomplet) — am tras de fir până la cauza-rădăcină în cod. Concluzia: o singură cauză explică majoritatea defectelor de „apare aici dar nu acolo", iar aceeași cauză e și sursa senzației de „greu/încărcat". Documentul propune soluții, fiecare cu o matrice de decizie ponderată. Doar cercetare — fără implementare.
Bug-urile par separate, dar 4 din 5 vin din același loc: platforma ține faza unei mașini în două modele paralele care nu se sincronizează. Restul sunt goluri de captură la recepție și un punct orb în teste. Iar greutatea percepută a UI-ului are aceeași sursă: aceleași mașini afișate pe multe suprafețe care nu sunt de acord între ele.
| # | Constatare | Sev. | Cauza-rădăcină |
|---|---|---|---|
| 02 | Mașina apare la Atelier dar nu la Constatare (și invers, între ecrane) | Critic | Atelier citește vehicles.faza; Constatarea citește assessments. Recepția creează doar vehicles, niciodată assessments. |
| 03 | Mașina nouă nu are mecanic și nu poate fi alocat | Critic | Vehiculul creat la recepție are mecanic:null și fără assessment nu există unde să atașezi alocarea. |
| 04 | „Coadă recepție" — neclar ce așteaptă fiecare; rolul șef vede încă mașina preluată | Mare | Filtrul e corect tehnic, dar semantica (ce înseamnă „în coadă" / „preluată") nu e comunicată în UI. |
| 05 | Recepție fără km · VIN · categorie problemă · delegat firmă; categoria nu se mai auto-setează și nici nu se poate alege | Mare | Câmpurile nu există în formular; categoria e capturată doar pe WhatsApp și pierdută la creare; câmpurile de daună sunt colectate dar ignorate de reducer. |
| 06 | Testele nu prind bug-uri de rol/flux — rulează tot ca „owner" | Critic | Niciun scenariu nu intră în rolul responsabil al fazei; zero aserții cross-pagină / cross-rol. Exact de asta a supraviețuit bug-ul de recepție. |
| 07 | UI perceput „greu/încărcat" | Mediu | Aceleași mașini pe Atelier + 6 pagini de fază (liste paralele) + benzi KPI pe fiecare ecran. |
Firul roșu: dacă unifici sursa de adevăr a fazei (02/03), repari și inconsistențele și decongestionezi UI-ul (07) — paginile de fază devin lentile peste aceeași sursă, nu liste care se contrazic.
Din ce sursă de stare își construiește fiecare pagină lista. Verde = aliniat cu faza vehiculului. Roșu = sursă proprie care poate diverge.
6 din 7 ecrane derivă din vehicles.faza. Singura excepție e Constatarea, care citește din assessments — un al doilea model, populat doar de datele-sămânță, niciodată de recepțiile reale. De aici toată divergența.
Evidență: pages-core.jsx (Atelier ~123, Aprovizionare ~335) · constatare.jsx (~32) · pages-more.jsx (coadă ~453) · pages-exec.jsx (ofertare ~174) · pages-service.jsx (execuție ~93, finalizare ~260) · data-reducer.jsx (ADD_RECEPTION ~174, ADVANCE_VEHICLE ~189).
Când creezi o recepție, reducer-ul scrie un vehicles (cu faza:"receptie") și un receptions — dar niciodată un assessments. Când avansezi mașina în „constatare", se schimbă doar vehicles.faza. Atelier (care citește vehicles) o arată în banda Constatare; pagina Constatare (care citește assessments) n-o vede. Și pentru că nu există assessment, nu există unde să atașezi mecanicul → „nu pot asocia mecanic".
| Opțiune | Consist. | BE | Efort | Risc | Claritate | Total |
|---|---|---|---|---|---|---|
| A · Patch defensivfiecare pagină citește vehicles.faza ca fallback când lipsește assessment | 3 | 1 | 5 | 3 | 2 | 31 |
| B · Sincronizare la dispatchADD_RECEPTION + ADVANCE creează/actualizează automat assessment-ul, într-un singur loc | 5 | 3 | 4 | 4 | 4 | 49 |
| C · Dosar vehicul unicun obiect per mașină (faza + sub-stări + mecanic + constatare/ofertă/piese ca sub-obiecte); paginile = lentile filtrate | 5 | 5 | 2 | 3 | 5 | 51 |
Acesta nu e un bug separat — e fața vizibilă a #02. Vehiculul creat la recepție pleacă cu mecanic:null, iar alocarea (Constatare → „Alocare") operează pe assessments, care nu există pentru mașina ta. Soluția B din #02 îl rezolvă automat: assessment-ul creat la recepție are câmpurile de alocare, deci „Alocare" funcționează.
Evidență: data-reducer.jsx ADD_RECEPTION creează vehicle cu mecanic:null, fără assessment; constatare.jsx alocarea operează pe assessments.
Tehnic, filtrul e corect: o mașină dispare din coadă când recepția devine „preluată". Problema e de comunicare — coada amestecă, fără să spună, mașini în stări diferite, iar tu nu poți ști „la o privire" ce ai de pregătit. Și starea „de primit" vs „preluat" nu e evidentă.
Lipsesc câmpuri esențiale pentru BE și pentru deciziile de mai târziu. Unele date sunt chiar extrase de Gogu (km, VIN) dar afișate doar read-only, nu capturate; categoria e capturată pe WhatsApp dar pierdută la creare; câmpurile de daună sunt colectate dar ignorate de reducer.
| Câmp | Stare azi | Necesar pentru |
|---|---|---|
| Kilometraj | lipsă în formular (extras de Gogu, doar read-only) | istoric, recomandări revizie, deviz |
| VIN / serie șasiu | lipsă în formular | identificare unică, comandă piese corecte |
| Categorie problemă | nu se auto-setează, nu e selectabilă (există doar pe WhatsApp, hardcodat „frâne" în fișă) | match mecanic↔mașină (BE), rutare, statistici |
| Tip client (delegat firmă) | dispărut — recepția forțează „Persoană fizică" | facturare juridică, delegat, date firmă |
| Câmpuri daună (asigurator/dosar/franșiză) | colectate dar ignorate de reducer | dosar daună, plată asigurător |
| Stare „preluată" | funcționează (programata→preluata) | — |
| Opțiune | Acuratețe | Viteză | Control | Reguli | Total |
|---|---|---|---|---|---|
| A · Doar select manualoperatorul alege din listă de fiecare dată | 3 | 2 | 5 | 3 | 29 |
| B · Doar auto (Gogu)derivată din textul problemei, fără override | 3 | 5 | 1 | 2 | 27 |
| C · HibridGogu propune (🤖 + conf%), operatorul confirmă/schimbă din listă | 5 | 4 | 5 | 5 | 48 |
Evidență: flow-ui.jsx (formular ~67) · pages-more.jsx (fișă Gogu ~579, „frâne" hardcodat) · data-reducer.jsx (payload ADD_RECEPTION fără km/vin/categorie/tip client; daună ignorată) · flows.jsx (selector tip client există doar la „Client nou" ~72).
Ai dreptate complet. Suita E2E rulează aproape tot ca owner (care vede toate ecranele) și comută pe client doar pentru portal. Niciun scenariu nu intră în rolul responsabil al fazei (consilier/mecanic/șef/magazie) ca să verifice că omul care trebuie să facă operațiunea chiar o vede și o poate face. Și nu există nicio aserție cross-pagină sau cross-rol. De asta a trecut bug-ul de recepție: nimic nu verifică „aceeași mașină, aceeași fază, pe orice ecran și pentru rolul corect".
| Gol în acoperire | Ce ar fi prins |
|---|---|
| Rulare în rolul real al fazei | „mecanicul nu vede mașina la Constatare" / „nu poate aloca" |
| Invariant cross-pagină (aceeași mașină pe toate ecranele afectate) | „apare la Atelier dar nu la Constatare" |
| Părăsire stare (după avansare, pleacă din ecranul vechi) | „rămâne în coada de recepție după preluare" |
| Gating pe rol (rolul greșit NU poate acționa) | butoane de acțiune ne-restricționate pe rol |
| Livrare notificare pe rol | notificarea ajunge la rolul țintă, nu la altcineva |
| Opțiune | Acoperire | Menten. | Efort | Regresie | Total |
|---|---|---|---|---|---|
| A · Aserții ad-hocadaug câteva verificări pe ici-colo | 2 | 2 | 5 | 2 | 26 |
| B · Scenarii per-rolfiecare fază rulată în rolul responsabil, cu verificarea că vede ce trebuie | 4 | 3 | 3 | 4 | 40 |
| C · Matrice de integritate fluxper tranziție: rolul corect poate · rolurile greșite nu · mașina apare/dispare pe TOATE paginile · notificarea ajunge la rolul țintă + invariant „o mașină, o fază peste tot" | 5 | 4 | 2 | 5 | 47 |
Evidență: lafix-e2e-demo.mjs (toate scenariile pornesc ca owner; doar portal=client; assertSeen e single-screen) · constatare.jsx / pages-core.jsx (primesc role dar nu îl folosesc la gating).
Sincer: platforma e puternică dar densă. Cea mai mare sursă de greutate nu sunt culorile sau spațierea — e redundanța structurală: aceeași mașină trăiește pe Atelier și pe 6 pagini de fază, fiecare cu propria listă, plus o bandă KPI „Biroul tău" pe fiecare ecran. Multe suprafețe care arată date suprapuse și uneori se contrazic (vezi #02). Vestea bună: dacă unifici sursa de adevăr, decongestionarea vine aproape gratis.
Nu orice repetiție e o eroare. Aceeași mașină ajunge în mai multe locuri din două motive complet diferite — și doar unul trebuie reparat:
Concret, pentru o singură mașină avansată în Constatare printr-o recepție reală, iată ce vede utilizatorul pe fiecare suprafață — același vehicul, șapte ecrane:
| Suprafață | Citește din | Ce vede utilizatorul | Verdict |
|---|---|---|---|
| Atelier (board) | vehicles.faza | Mașina, în banda „Constatare" | ✓ corect |
| Constatare (pagină) | assessments | Nimic — nu există assessment pentru ea | ✗ se contrazice cu Atelier |
| Alocare mecanic (din Constatare) | assessments | Niciun loc unde să atașezi mecanicul | ✗ blocaj — vezi #03 |
| Recepție · coadă | receptions (fără avansate) | Nimic — a fost deja avansată | ✓ corect |
| Ofertare · Aprovizionare · Execuție · Finalizare | vehicles.faza | Nimic — nu e încă în fazele lor | ✓ corect |
Din 7 suprafețe, 6 sunt de acord. Singura care ar trebui să arate mașina — pagina Constatare — e exact cea care n-o vede. „Suprapus" devine „se contrazice" fix în punctul care contează.
De ce decongestionarea vine „aproape gratis": dacă paginile de fază devin lentile filtrate peste o singură sursă (opțiunea C, vezi #02), două lucruri se întâmplă din aceeași schimbare. Unu — contradicțiile dispar prin construcție: nu mai există un al doilea model care să difere, deci nimic nu se mai poate contrazice. Doi — poți decide conștient pe câte suprafețe apare o mașină, fără să ții manual sincronizate liste paralele; ce rămâne e suprapunere voită, nu accidentală. Nu plătești de două ori: efortul care repară clasa de bug-uri din #02 e același care subțiază UI-ul. De-aici „gratis".
| Opțiune | Cognitiv | Funcții | Efort | Și bug-uri | Total |
|---|---|---|---|---|---|
| A · Cosmeticmicșorez benzile KPI, strâng topbar | 2 | 5 | 5 | 1 | 29 |
| B · Disclosure progresivKPI colapsabile, formular recepție în pași, topbar cu „mai multe" | 4 | 5 | 3 | 2 | 34 |
| C · Restructurare în jurul unei singure surseAtelier = board-ul canonic; paginile de fază = lentile filtrate peste aceeași sursă, nu liste paralele; fiecare ecran un singur job | 5 | 4 | 2 | 5 | 45 |
Opțiunea câștigătoare (C, scor 45) elimină structural clasa de bug-uri #02 — nu o peticește. Direcția în patru cadre: conceptul, board-ul canonic și două lentile. Sunt wireframe-uri (fidelitate redusă, copy real); culorile și spațierea s-ar alinia la design-system-ul v5 la implementare.
Filtre in-place pe o singură rută /atelier — nu pagini separate per fază. O bară de lentile persistentă, cu contoare live, îngustează board-ul la o singură bandă și schimbă jobul, fără să navighezi și fără să încarci altă sursă. O rută proprie per lentilă ar reintroduce exact senzația de „altă pagină = altă listă" care a născut #02; o singură rută face imposibilă existența unei a doua liste.
| Decizie | Recomandare |
|---|---|
| Split vs colaps pe desktop lat board plin + panou de fază, sau o singură bandă lățită? | Colaps implicit (protejează „un singur job"); split ca opțiune doar pe ecran lat. |
| „Predată" — 6 sau 7 lentile azi e status, nu faza | 6 lentile aliniate la PIPELINE; „Predate" ca vedere-arhivă terminală, nu lentilă de flux. |
| Permisiuni per-rol magazia vede doar Aprovizionare | Ascunde lentilele/fațetele interzise (nu le dezactiva); mută matricea rol-fază în condiționale de lentilă/fațetă. |
| Redirect URL-uri vechi /constatari · /ofertare · /piese | Devin ?lentila=… pe /atelier, cu redirect pentru bookmark-urile vechi. |
Întrebarea patronului (4 iul.): „mai are sens să văd bara de lentile dacă oricum sunt în Aprovizionare? și se vede în stânga în meniu ce am ales". Raportul de mai jos analizează redundanța, propune trei opțiuni cu machete și le punctează în trei matrice. Stare: ✅ echipa a ales opțiunea A („Scoatem bara") — implementată pe 4 iul. 2026. Meniul e singura navigare între faze, contorul stă în subtitlu, Atelierul își păstrează lentilele. Testele E2E nu atingeau bara, deci schimbarea e sigură tehnic.
| Funcție | Meniul din stânga | Bara de lentile | Verdict |
|---|---|---|---|
| Destinațiile (fazele) | ✅ toate, filtrate pe rol | ✅ toate | duplicat |
| Contor per fază | ✅ insigne (Ofertare 3) | ✅ în chip | duplicat |
| Faza curentă evidențiată | ✅ element activ | ✅ chip activ | duplicat |
| Întoarcerea la tabloul „Toate" | ❌ (Atelier e alt element) | ✅ | unic — dar acoperit de breadcrumb-ul „‹ Toate fazele" |
| Ordinea fazelor (sens de conductă) | ⚠️ listă verticală | ✅ secvență orizontală | unic |
Nuanță importantă: pe Atelier aceeași bară are alt rol — chips-urile filtrează tabloul pe loc (lentile adevărate). Problema există doar pe paginile de fază deschise din meniu, unde chips-urile navighează — adică dublează meniul.
| Criteriu | Pondere | A · Scoatem | B · Mini-fir | C · Cum e |
|---|---|---|---|---|
| Claritate navigație (o singură sursă de adevăr) | 25% | 5 | 4 | 2 |
| Conștiența fluxului (poziție + volume în conductă) | 20% | 2 | 5 | 4 |
| Spațiu vertical câștigat | 15% | 5 | 4 | 2 |
| Viteza de salt între faze | 15% | 3 | 4 | 5 |
| Omogenitate cu ecosistemul | 15% | 5 | 3 | 3 |
| Efort & risc de implementare | 10% | 5 | 2 | 5 |
| Total ponderat | 4,10 | 3,95 | 3,30 |
Punctaje argumentate: la viteza de salt A ia 3, nu 1 — meniul e tot un singur clic, pierzi doar apropierea de conținut. La conștiența fluxului A ia 2 — insignele din meniu dau volumele, dar pierd ordinea orizontală. La omogenitate B ia 3 — introduce o „specie vizuală" nouă, exact ce am eliminat în rundele 9–10.
| Rol | Folosește paginile de fază… | A | B | C |
|---|---|---|---|---|
| Șef atelier | intens, sare des între faze | −mic (saltul mută în meniu) / +claritate | +păstrează secvența | ± status quo |
| Consilier | Recepție · Ofertare · Finalizare | +spațiu, −nimic real | ± | −zgomot |
| Mecanic / Vopsitor | doar Execuția | +mult (bara e zgomot pur) | ± | −zgomot pur |
| Patron | survolează tot | ± (are Atelier + Rapoarte) | +conductă vizibilă | ± |
| Risc | A · Scoatem | B · Mini-fir | C · Cum e |
|---|---|---|---|
| Regresii E2E | zero (bara nu e atinsă de teste) | mic (element nou) | zero |
| Obiceiuri de utilizator rupte | mic (obiceiuri neformate) | mic | — |
| Datorie de design pe termen lung | zero | mediu (element unic de întreținut) | mare (redundanța rămâne în orice captură și decizie viitoare) |
| Reversibilitate | totală (un rând condiționat) | medie | — |
Singura pondere care răstoarnă concluzia: dacă conștiența fluxului urcă la 30% („vreau ca oricine, pe orice ecran de fază, să simtă conducta cu volumele ei"), B trece pe primul loc (4,25 vs 3,90). Cele două opțiuni nu se exclud în timp: principiul „unelte la momentul potrivit" spune să nu construim B speculativ — A acum, iar dacă după o săptămână de folosire lipsește firul conductei, B se construiește curat peste A, proiectat de la zero.
Ordonat după raport valoare/risc. Nimic din asta nu e implementat — aștept să alegi ce dau drumul.
| # | Acțiune | Rezolvă | Efort | Recomandare |
|---|---|---|---|---|
| 1 | Sincronizare assessment la recepție/avansare (#02 opțiunea B) | mașina apare peste tot · mecanic alocabil (#02, #03) | mic | acum |
| 2 | Captură recepție: km, VIN, categorie hibridă (🤖+select), tip client (delegat firmă), persistare daună (#05) | date pentru BE + alocare | mediu | acum |
| 3 | Strat de teste „integritate flux pe rol" (#06 opțiunea C) | prinde regresiile de mai sus + viitoare | mediu | acum (împreună cu 1–2) |
| 4 | Claritate coadă recepție (sub-grupare „așteaptă: …" + stare fizică) (#04) | „la o privire știu ce am de pregătit" | mic | curând |
| 5 | Câștiguri rapide UX (KPI colapsabile, recepție în pași) (#07-B) | greutate percepută | mic-mediu | curând |
| 6 | Restructurare „o singură sursă" (#02-C + #07-C) — la port în BE | cauza-rădăcină + decongestionare structurală | mare | la port |
| 7 | Programare drag-and-drop (ca lentilă) | confort planificare | mediu | după declutter |
Rezultatul unui audit UX pe întreaga aplicație (cinci clustere de ecrane + un audit dedicat de setări & configurări). Tot ce e deja livrat anterior (KPI colapsabile, recepție în pași, topbar „mai multe", board-ul cu lentile, unificarea #02) e exclus.
Ridicate independent de mai mulți auditori — deci reale, nu de gust.
| Ecran | Propunere | Impact | Efort |
|---|---|---|---|
| Constatare, Ofertare & 5 ecrane admin | Câmpurile „Caută…" sunt inerte — leagă-le de listă (item-ele sunt deja la îndemână) sau scoate-le până sunt funcționale (onSearch no-op pe 8 locuri). | mare | S |
| Constatare (decizie) | Două butoane identice „Adaugă la Constatare" → „+ Adaugă constatare" (defecte) vs „+ Adaugă operațiune" — unul adaugă greșit tipul. | mediu | S |
| Programare | Scoate „Sugestii" din comutatorul Zi/Săptămână/Lună → pastilă separată „✦ Sugestii (N)". | mare | S |
| Roluri / Sarcini | Coloanele matricei RBAC la taxonomia canonică de 7 faze (fix „Ofertă" → „Ofertare"). | mare | S |
| Portal client | „de ce recomandat" din tooltip-title (hover) → popover la tap (portalul e touch, hover nu se declanșează). | mediu | S |
| Finalizare Service | Sub butonul „Finalizare" dezactivat, listează ce blocaje lipsesc (lista e deja calculată în AICard). | mediu | S |
| RolePicker | Eyebrow-ul pastilei „Rol activ" → „Vezi ca" (elimină ambiguitatea identitate vs impersonare). | mic | S |
| Contabilitate ↔ Financiar | Subtitlu de scop pe fiecare pagină de bani + de-duplică KPI „de încasat" la un singur proprietar. | mediu | S |
| Ecran | Propunere | Efort |
|---|---|---|
| Roluri / Sarcini / Asistent | O singură matrice RBAC persistată (Roluri = sursă), Sarcini doar rezumat read-only; configul Gogu doar în Asistent AI. | M |
| Recepție · Fișă | Câmpurile pre-completate de AI fie editabile real (contract dirty→saving→saved), fie text simplu etichetă/valoare; cele 7 badge-uri „✦ auto" → un singur „✦ pre-completat din talon · de ce?". | M |
| Execuție Service (tabletă) | Bara „Blocat / Termină Lucrarea" lipită jos (sticky footer) — acțiunea cea mai frecventă, mereu la un tap („mâini unsuroase"). | M |
| Shell (wayfinding) | Promovează breadcrumb-ul „Atelier ▸ fază" în Toolbar-ul comun + fiecare SlideOver cu Esc-to-close + header consistent. | L |
| Model Fluxuri | Șterge pagina SLA moartă (coliziune window) + persistă fluxul + confirm pe politicile cu risc. | M |
Afordanțe — elimină controalele false / inerte
| Ecran | Propunere | Impact | Efort |
|---|---|---|---|
| Recepție · Fișă | Valori AI read-only deghizate în input-uri → editabile sau text simplu. | mare | M |
| Auto la Schimb | Mâner de redimensionare (ew-resize) pentru durata închirierii (1–7 zile). | mediu | M |
| Relații Clienți | „Legat de acest client" cu valori fantomă → leagă de date reale, „niciuna" când e gol. | mediu | M |
| Constatare | Toggle „Fă intern" arată ca etichetă statică → switch clar / „🔒 Intern" text simplu. | mic | S |
Transparență & provenance — fiecare valoare calculată/AI cu „de ce?"
| Ecran | Propunere | Impact | Efort |
|---|---|---|---|
| Aprovizionare · Piese | „de ce?" per rând pe piesa „✦ recomandat" — scor preț / termen / garanție / marjă față de alternative. | mediu | M |
| WhatsApp (drawer) | Pastilă cu nr. detectat + client rezolvat + „de ce?" pe categorie (cuvinte-cheie + scor). | mediu | M |
| NotifBell | Chip de rol + grupare pe rol + provenance „declanșat de: predare B-127-LFX". | mediu | M |
| Integrări | Status real (ok / sincronizare / eroare / token expiră) + last-sync + erorile sus. | mediu | M |
Densitate & decongestie
| Ecran | Propunere | Impact | Efort |
|---|---|---|---|
| Ofertare | Status repetat de 3× pe card → scoate rollup-ul, buton etichetat „Trimite" / „Marchează aprobată". | mediu | S |
| Atelier | Legendă pentru glifele de fațete (✓ gata · • în lucru · ! de făcut) + mută linia platform/since în panou. | mediu | M |
| Relații Clienți | Sortează necitite + ITP-imminent sus; badge necitit legat de o sursă reală. | mediu | M |
Consistență — dedup + extrage controale comune
| Ecran | Propunere | Impact | Efort |
|---|---|---|---|
| 6 ecrane-listă | Un singur FilterChips + sort pe Seg peste tot — aceeași acțiune mentală arată la fel. | mediu | M |
| Bonus (lei) vs restul (€) | Etichetă de unitate pe cardul Bonus + un singur fmtMoney(value, currency). | mediu | S |
| Execuție Service | Un singur ServiceVehCard (constatare + execuție au azi 2 vocabulare). | mediu | M |
| Sidebar colapsat | Un singur model de rail pentru toate rolurile (azi diferă pe rol). | mediu | M |
Flux & accesibilitatea acțiunii
| Ecran | Propunere | Impact | Efort |
|---|---|---|---|
| WhatsApp (drawer) | Acțiunea primară după categorie (problemă → „Creează recepție"; confirmare → „Deschide în Programări"). | mediu | S |
| Programare | Drag direct al unui bloc (orizontal = altă zi, vertical = altă oră), reutilizând logica din Auto la Schimb. | mare | M |
| Configurare Rapoarte | Mută toggle-urile în Rapoarte („Personalizează panoul") sau mini-preview live. | mediu | M |
| FAB global | Afordanță ▾ + condu cu create-uri secundare când pagina expune deja primarul. | mediu | M |
| NotifBell | Rândul = peek-in-place (marchează citit); navigarea pe „Deschide ▸" explicit. | mic | S |
| LocationPicker | Icon-only implicit; pastila etichetată doar pe ruta Stoc · Gestiune (singura pe care o scopează). | mediu | S |
Salvare & feedback — locul unde se pierd date
| Ecran | Propunere | Impact | Efort |
|---|---|---|---|
| Model Fluxuri | Editor complet pe useState pur — „Gata" pierde tot. Persistă flow+policies + bară „Salvează / Renunță". | mare | M |
| Asistent AI / Sarcini | Persona + task-uri dispar la navigare (doar numele are „Salvează"). Persistă + auto-save uniform cu un singur „Salvat ✓". | mare | M |
| Setări · Program | Modifică programul live, fără toast/buton — o bifă greșită schimbă tăcut sloturile. Bară „Salvează" pe murdar. | mare | M |
| Roluri | Auto-save real, dar anunțat doar într-un AICard jos → indicator persistent „Salvat automat ✓". | mediu | S |
| Configurare Rapoarte | Toggle tăcut → contor live „Panoul are N casete" + bifă „Salvat". | mic | S |
Siguranță — configurări periculoase
| Ecran | Propunere | Impact | Efort |
|---|---|---|---|
| Fluxuri | Politicile cu risc mare („Owner forțează gate", „Preț preferențial / portiță") se aprind cu un tap → confirm la activare + grup „Cu risc — auditate". | mare | S |
| Roluri | „Resetează" șterge instant toate rolurile custom + matricea → confirm. | mediu | S |
| Fluxuri | „Adaugă fază" inserează o fază no-op în afara taxonomiei de 6 → ascunde sub „fază personalizată (avansat)" cu avertisment. | mediu | M |
IA / descoperire & afordanțe oneste
| Ecran | Propunere | Impact | Efort |
|---|---|---|---|
| Setări (hub) | O pagină-poartă grupată (Operare · Comunicare · Echipă & roluri · Asistent · Audit) + mereu afișează tab-bar-ul chiar în mod only=. | mare | M |
| Audit | Interval de timp (Azi / 7z / 30z) + „Exportă (CSV)" + dată absolută la hover pe timestamp. | mediu | M |
| „Conectează" e un toggle fals → SlideOver cu pașii reali (număr / cod), apoi marchează conectat. | mediu | M | |
| Toggle-uri dependente se sting fără motiv → stare „blocat" + „Disponibil după conectarea WhatsApp". | mediu | S | |
| Integrări | Carduri conectat/neconectat identice (ternar mort) → tratament distinct + chip „Neconfigurate: N". | mediu | S |
Transparență AI, dedup config & polish
| Ecran | Propunere | Impact | Efort |
|---|---|---|---|
| Asistent / Sarcini | Task-urile Gogu fără provenance → popover „ce face" (declanșator → acțiune → ecran) + 🤖 + „decizia ta rămâne finală". | mediu | M |
| Roluri vs Sarcini / Asistent | Dedup la o singură sursă (în spiritul #02) — vezi „Big bets". | mediu | M |
| Copy (DEX) | „widget" → „casetă" (deja folosit în Rapoarte, inconsistent în WorkDesk); „checklist-ul" → „lista de cerințe". | mic | S |
| Fluxuri | Câmp SLA-țintă (zile) în drawer (promis în subtitlu, lipsește) + drag-handle ca la WorkDesk. | mediu | M |
| Setări · Program | Chip-delta pe capacitate („−18 sloturi/săpt. față de acum") + scoate slot/zi din hidden. | mediu | S |